class Animal {}

class Dog extends Animal {}

class Cat extends Animal {
  Cat() {
    print("I'm a Cat!");
  }
}

//注意,这里变量不定义在任何具体类体内，所以这个animal是一个顶层变量。
//虽然看似创建了Cat对象，但是由于顶层变量延迟初始化的原因，这里根本就没有创建Cat对象
Animal animal = Cat();
main() {
  animal = Dog(); //然后又将animal引用指向了一个新的Dog对象，
}
